package com.itheima.edu.info.manager.dao;

import com.itheima.edu.info.manager.domain.Student;

public class StudentDao implements BaseStudentDao {

    //定义一个长度为5的数组，作为整个系统的数据容器
    private static Student[] stus = new Student[5];
    //添加静态static代码块
    static{
        Student stu1=new Student("heima001","张三","23","1990-12-12");
        Student stu2=new Student("heima002","李四","24","1991-11-11");
        stus[0]=stu1;
        stus[1]=stu2;
    }

    public boolean addStudent(Student stu) {

        // 添加学生到数组

        //定义变量为-1，假设数组已经全部存满，没有null值
        int index = -1;
        //遍历数组取出每一个元素，判断是否是null
        for (int i = 0; i < stus.length; i++) {
            //定义学生类变量接收数组中每一个学生对象
            Student student = stus[i];
            //如果为null，让index记录当前索引位置，并break结束循环
            if (student == null) {
                index = i;
                break;
            }
        }
        //返回是否添加成功的boolean类型状态
        if (index == -1) {
            return false;
        } else {
            //索引不是-1，就把学生对象存入数组的索引位置
            stus[index] = stu;
            return true;
        }
    }

    public Student[] findAllStudent() {
        return stus;
    }

    //库管的删除方法
    public void deleteStudentById(String delId) {
        //查找要删除的学生id在容器中的索引位置
        int index = getIndex(delId);
        //将该索引位置用null元素进行覆盖，从而达到删除的效果
        stus[index] = null;
    }

    //根据学号查找对应的学生对象在数组容器中的索引位置
    public int getIndex(String id) {
        //1.先假设要查找的学号不存在，index先记录-1
        int index = -1;
        //遍历数组容器
        for (int i = 0; i < stus.length; i++) {
            //2.1拿到每一个学生对象
            Student stu = StudentDao.stus[i];

            //2.2判断当前学生对象的学号在容器中不为空和要查找的学号是否相同
            if (stus != null && stu.getId().equals(id)) {
                //相同，则说明要查找的学号存在，则修改为当前学生对象的索引
                index = i;
                break;
            }
        }
        return index;
    }

    //库管中的修改功能
    public void updateStudentById(String updateId, Student newStu) {
        //找到当前要修改的学号对应的学生对象在数组容器中索引位置
        int index = getIndex(updateId);
        //将用户填写的新的学生对象信息去覆盖掉对应索引位置的旧学生对象信息，从而达到修改效果
        stus[index] = newStu;
    }

}
